package beans;


import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;

import dao.PersonaDao;
import dao.ProyectoDao;
import excepciones.DaoException;

import modelo.Persona;
import modelo.Proyecto;

@ManagedBean 
@RequestScoped
public class EditarCoordinadoresBean {

	@ManagedProperty(value="#{editProyectoBean}")
	private EditProyectoBean editProyectoBean;
	
	private List<Persona> coordinadores;
	private List<Persona> seleccionBorrar;
	private Proyecto proyecto;
	private List <Persona> seleccionCoordinador;
	private List<Persona> personas;
	private ProyectoDao proyectoDao;
	
	public ProyectoDao getProyectoDao() {
		return proyectoDao;
	}

	public void setProyectoDao(ProyectoDao proyectoDao) {
		this.proyectoDao = proyectoDao;
	}

	@PostConstruct
	public void init(){

		this.setProyecto(this.getEditProyectoBean().getProyecto());
		// Traigo los coordinadores				
		this.setCoordinadores((List<Persona>) this.getProyecto().getCoordinadores());					

		PersonaDao personaDao = new PersonaDao();
		try {
			this.setPersonas(personaDao.getTodasLasPersonas());
		} catch (DaoException e) {
			e.printStackTrace();
		}
		
	}

	/**
	 * Borro las personas seleccionadas como coordinadores del proyecto
	 */
	public void borrar(){
		List<Persona> aBorrar = this.getSeleccionBorrar();
		
		for (Persona persona : aBorrar) {
			this.getCoordinadores().remove(persona);
		}		
		actualizarProyecto();
	}
	
	/**
	 *  Agrego las personas del listado y la guardo en el proyecto como coordinadores
	 */
	public void agregar(){
		
		List<Persona> selec = this.getSeleccionCoordinador();
		for (Persona persona : selec) {
			if (!this.getCoordinadores().contains(persona))
				this.getCoordinadores().add(persona);
		}
		actualizarProyecto();		
	}
	/**
	 * Actualiza en la BD las modificaciones que se hicieron en el proyecto
	 */
	protected void actualizarProyecto(){
		ProyectoDao proDao = new ProyectoDao(proyecto);
		this.proyecto.setCoordinadores(getCoordinadores());
		try {
			proDao.update();
			proDao.closeEntityManager();
		} catch (DaoException e) {
			e.printStackTrace();
		}
	}

	public String volver(){
		return "irEditarProyectos";
	}
	
	public List<Persona> getCoordinadores() {
		return coordinadores;
	}

	public void setCoordinadores(List<Persona> coordinadores) {
		this.coordinadores = coordinadores;
	}

	public Proyecto getProyecto() {
		return proyecto;
	}

	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}

	public List<Persona> getSeleccionCoordinador() {
		return seleccionCoordinador;
	}
	public void setSeleccionCoordinador(List<Persona> seleccionCoordinador) {
		this.seleccionCoordinador = seleccionCoordinador;
	}

	public List<Persona> getPersonas() {
		return personas;
	}

	public void setPersonas(List<Persona> personas) {
		this.personas = personas;
	}

	public List<Persona> getSeleccionBorrar() {
		return seleccionBorrar;
	}

	public void setSeleccionBorrar(List<Persona> seleccionBorrar) {
		this.seleccionBorrar = seleccionBorrar;
	}

	public EditProyectoBean getEditProyectoBean() {
		return editProyectoBean;
	}

	public void setEditProyectoBean(EditProyectoBean editProyectoBean) {
		this.editProyectoBean = editProyectoBean;
	}
	
}
